﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BookStore.Solution.BLL;
using BookStore.Solution.Entities;
using BookStore.Solution.Utilities;

namespace BookStore.Solution.Presentation
{
    public partial class ucEntryBill : UserControl
    {
        public ucEntryBill()
        {
            InitializeComponent();
        }
        EntryBillManager EntryBillManager = new EntryBillManager();
        EntryBillDetailManager EntryBillDetailManager = new EntryBillDetailManager();
        DataTable MyBillTable = null;

        private bool SetRole()
        {
            bool t = false;
            List<string> roles = AccountManager.GetRoleName();
            btnAdd.Enabled = btnDelete.Enabled = btnUpdate.Enabled = btnShowDetail.Enabled = btnPrint.Enabled = false;
            btnSearchByDay.Enabled = btnSearchByID.Enabled = btnSearchBySupplier.Enabled = false;
            if (roles.Contains("Thêm, xóa, cập nhật phiếu nhập"))
            {
                btnAdd.Enabled = btnDelete.Enabled = btnUpdate.Enabled = btnShowDetail.Enabled = true;
                t = true;
            }
            if (roles.Contains("Tìm kiếm phiếu nhập"))
            {
                btnSearchByDay.Enabled = btnSearchByID.Enabled = btnSearchBySupplier.Enabled = btnShowDetail.Enabled = btnPrint.Enabled = true;
                t = true;
            }
            return t;
        }

        private void ucEntryBill_Load(object sender, EventArgs e)
        {
            if (SetRole())
            {
                MyBillTable = EntryBillManager.GetAll();
                LoadData(MyBillTable);
            }
        }
        private void LoadData(DataTable table)
        {
            dtgvListEntryBill.AutoGenerateColumns = false;
            dtgvListEntryBill.DataSource = table;
            for (int i = 0; i < dtgvListEntryBill.Columns.Count; i++)
            {
                dtgvListEntryBill.Columns[i].DataPropertyName = dtgvListEntryBill.Columns[i].Name;
            }
        }
        private void InsertDatagridview(EntryBill EntryBill)
        {
            
            DataRow r = MyBillTable.NewRow();
            r[0] = EntryBill.EntryBillID;
            r[1] = EntryBill.EmployeeID;
            r[2] = EntryBill.Date;
            r[3] = EntryBill.SupplierID;
            r[4] = EntryBill.Status;
            MyBillTable.Rows.Add(r);
            LoadData(MyBillTable);
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            FrmEntryBill frm = new FrmEntryBill();
            frm.ShowDialog();
            if (frm.NewEntryBill != null)
            {
                InsertDatagridview(frm.NewEntryBill);
                MessageBox.Show("Thêm phiếu nhập thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dtgvListEntryBill.SelectedRows.Count > 0)
            {
                DialogResult result = MessageBox.Show("Bạn muốn xóa phiếu nhập", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    EntryBill BillID = getBill();
                    //  BillDetailManager.DeleteToBill(BillID);
                    BillID.Status = "Đã xóa";
                    EntryBillDetailManager.UpdateStatus(BillID);
                    string kq = EntryBillManager.Delete(BillID);
                    if (kq.CompareTo("Xóa thành công") == 0)
                    {
                        dtgvListEntryBill.Rows.RemoveAt(dtgvListEntryBill.CurrentRow.Index);
                        MessageBox.Show("Xóa phiếu nhập thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }

            }
            else
            {
                MessageBox.Show("Chọn hóa đơn cần xóa", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private EntryBill  getBill()
        {
            EntryBill b = new EntryBill();
            b.EntryBillID = int.Parse(dtgvListEntryBill.SelectedRows[0].Cells[0].Value.ToString());
            b.EmployeeID = dtgvListEntryBill.SelectedRows[0].Cells[1].Value.ToString();
            b.Date = DateTime.Parse(dtgvListEntryBill.SelectedRows[0].Cells[2].Value.ToString());
            b.SupplierID = dtgvListEntryBill.SelectedRows[0].Cells[3].Value.ToString();
            b.Status = dtgvListEntryBill.SelectedRows[0].Cells[4].Value.ToString();
            return b;
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            EntryBill entrybill;
            if (dtgvListEntryBill.SelectedRows.Count > 0)
            {
                entrybill = getBill();
                FrmEntryBill frm = new FrmEntryBill(entrybill);
                frm.ShowDialog();
                for (int i = 0; i < dtgvListEntryBill.RowCount; i++)
                {
                    if (int.Parse(dtgvListEntryBill.Rows[i].Cells[0].Value.ToString()) == frm.NewEntryBill.EntryBillID)
                    {
                        dtgvListEntryBill.Rows[i].Cells[3].Value = frm.NewEntryBill.SupplierID;
                        dtgvListEntryBill.Rows[i].Cells[2].Value = frm.NewEntryBill.Date;
                        break;
                    }
                }
            }
            else
                MessageBox.Show("Bạn hãy chọn phiếu nhập cần cập nhật", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnShowDetail_Click(object sender, EventArgs e)
        {
            EntryBill entrybill;
            if (dtgvListEntryBill.SelectedRows.Count > 0)
            {
                entrybill = getBill();
                FrmEntryBill frm = new FrmEntryBill(entrybill, "view");
                frm.ShowDialog();
            }
            else
                MessageBox.Show("Hãy chọn hóa đơn cần xem chi tiết", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnSearchByDay_Click(object sender, EventArgs e)
        {
            SearchEntryBillByDay frm = new SearchEntryBillByDay();
            frm.ShowDialog();
            if (frm.datetime.Year > 1999)
            {
                MyBillTable = EntryBillManager.SearchByDay(frm.datetime);
                if(MyBillTable!=null)
                LoadData(MyBillTable);
                else
                    MessageBox.Show("Không có phiếu nhập nào được tìm thấy", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnSearchByID_Click(object sender, EventArgs e)
        {
            SearchEntryBillByID frm = new SearchEntryBillByID();
            frm.ShowDialog();
            if (frm.EntrybillID != -1)
            {
                MyBillTable = EntryBillManager.SearchID(frm.EntrybillID);
                if (MyBillTable != null)
                {
                    LoadData(MyBillTable);
                }
                else
                    MessageBox.Show("Không có phiếu nhập nào được tìm thấy", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSearchBySupplier_Click(object sender, EventArgs e)
        {
            frmSearchEntryBillBySupplier frm = new frmSearchEntryBillBySupplier();
            frm.ShowDialog();
            if (frm.status != "")
            {
                MyBillTable = EntryBillManager.SearchBySupplierID(frm.supplierID);
                if (MyBillTable != null)
                {
                    LoadData(MyBillTable);
                }
                else
                {
                    MessageBox.Show("Không có phiếu nhập nào được tìm thấy", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            frmPrintEntryBill frm = new frmPrintEntryBill(DataUtil.ToInt(dtgvListEntryBill.SelectedRows[0].Cells[0].Value));
            frm.ShowDialog();
        }
    }
}
